home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 1 / PC Actual CD 01.iso / f1 / utils1.arj / SECTVIEW.ASM < prev    next >
Encoding:
Assembly Source File  |  1992-05-13  |  4.7 KB  |  216 lines

  1. ;
  2. ;        *************************
  3. ;       ***   SECTVIEW.COM v0.2 ***
  4. ;        *************************
  5. ; Visualizacion de un sector predeterminado
  6. ;
  7. ;             Juan C. Enrique
  8. ;
  9. ;      PRIMERA VERSION: 07/04/1992
  10. ;
  11. ;
  12.  
  13. CODE_SEG        SEGMENT PUBLIC
  14.                 ASSUME CS:CODE_SEG, DS:CODE_SEG
  15.  
  16.         ORG     100h
  17.  
  18. SECTVIEW_COM:
  19.  
  20.         JMP    START
  21.  
  22. num_sect        DB 0,0
  23. bufftec         DB 5,0,0,0,0,0,0
  24.  
  25. START:
  26.         MOV     AL,0
  27.         MOV     CX,0
  28.         MOV     DH,24
  29.         MOV     DL,79
  30.         MOV     BH,7
  31.         MOV     AH,6
  32.         INT     10H
  33.         MOV     DX,0                ;
  34.         MOV     BH,0                ;
  35.         MOV     AH,2                ;
  36.         INT     10H                 ;  CLS
  37.  
  38.         MOV     DX,OFFSET MSG0
  39.         MOV     AH,9
  40.         INT     21H
  41.  
  42. START2:
  43.         MOV     DX,OFFSET MSG00
  44.         MOV     AH,9
  45.         INT     21H
  46.  
  47.         MOV     DX,OFFSET bufftec
  48.         MOV     AH,10
  49.         INT     21H                     ; Lee cadena tecl. (4+1 BYTES)
  50.  
  51.  
  52.         MOV     DI,OFFSET bufftec+2     ; cadena entrada
  53.         CALL    CONVERT                 ; conversion
  54.         MOV     WORD PTR [num_sect],AX  ; almacena valor convertido en WORD
  55.  
  56.         XOR     AX,AX                   ; drive A:
  57.         MOV     DX,WORD PTR [num_sect]  ; num. de sector marcado
  58.         MOV     BX,OFFSET BUFFER        ; dir transferencia en RAM
  59.     MOV    CX,1
  60.  
  61.         CLC
  62.         INT     25H
  63.         POP     DI
  64.         JC      error                   ; error de lectura
  65.  
  66. ; salida por pantalla
  67.  
  68.         MOV     DX,OFFSET MSG1
  69.         MOV     AH,9
  70.         INT     21H                     ; escribe lineas
  71.  
  72.         MOV     CX,512                  ; bytes por sector
  73.         MOV     BX,OFFSET BUFFER        ; dir datos sector
  74. BUCLE1:
  75.         MOV     DL,BYTE PTR [BX]        ; byte del buff. del sector
  76.         CMP     DL,32
  77.         JG      BCONT                   ; si ascii CL superior a 32(space)
  78.  
  79.         MOV     DL,32
  80. BCONT:
  81.         MOV     AH,2
  82.         INT     21H                     ; saca ASCII por pantalla
  83.  
  84.         INC     BX                      ; inc cont. buffer
  85.         LOOP    BUCLE1
  86.  
  87.         MOV     DX,OFFSET MSG1
  88.         MOV     AH,9
  89.         INT     21H                     ; lineas
  90.  
  91.         MOV     DX,OFFSET MSG2
  92.         INT     21H
  93.         INT     20H                     ;  Vuelve al DOS
  94.  
  95. ;
  96. ; =============================================================
  97. ;  Esta rutina convierte el ascii de cuatro caracteres apuntado
  98. ; por DI en su correspondiente numero y lo convierte en   una
  99. ; palabra (2bytes) que devuelve en AX.
  100. ; =============================================================
  101. ;
  102.  
  103. CONVERT:
  104.         MOV     AL,BYTE PTR [DI+0]
  105.     CALL    convert_hex_digit
  106.     JC    valor_incorrecto
  107.     SHL    AL,1
  108.         SHL     AL,1
  109.         SHL     AL,1
  110.         SHL     AL,1
  111.     PUSH    AX
  112.         MOV     AL,BYTE PTR [DI+1]
  113.     JC    valor_incorrecto
  114.     CALL    convert_hex_digit
  115.     POP    BX
  116.     OR    AL,BL
  117.     MOV    AH,AL
  118.     PUSH    AX
  119.         MOV     AL,BYTE PTR [DI+2]
  120.     CALL    convert_hex_digit
  121.     JC    valor_incorrecto
  122.     SHL    AL,1
  123.         SHL     AL,1
  124.         SHL     AL,1
  125.         SHL     AL,1
  126.     PUSH    AX
  127.         MOV     AL,BYTE PTR [DI+3]
  128.     CALL    convert_hex_digit
  129.     JC    valor_incorrecto
  130.     POP    BX
  131.     OR    AL,BL
  132.     MOV    BL,AL
  133.     POP    AX
  134.     MOV    AL,BL
  135.     RET
  136.  
  137. ;
  138. ; Errores
  139. ;
  140.  
  141. valor_incorrecto:
  142.  
  143.         MOV     DX,OFFSET MSG51
  144.     MOV    AH,9
  145.     INT    21H
  146.     INT    20H
  147.  
  148. error:
  149.  
  150.         MOV     DX,OFFSET MSG52
  151.         MOV     AH,9
  152.         INT     21H
  153.         INT     20H
  154.  
  155. ;-----------------------------------------------------
  156. ; P.Norton:
  157. ;   Convierte el car de AL en un NIBBLE devuelto en AL
  158. ;             carry se activa si hay error
  159. ;-----------------------------------------------------
  160.  
  161. CONVERT_HEX_DIGIT:
  162.  
  163.     CMP    AL,'0'
  164.     JB    BAD_DIGIT
  165.     CMP    AL,'9'
  166.     JA    TRY_HEX
  167.     SUB    AL,'0'
  168.     CLC
  169.     RET
  170. TRY_HEX:
  171.     CMP    AL,'A'
  172.     JB    BAD_DIGIT
  173.     CMP    AL,'F'
  174.     JA    BAD_DIGIT
  175.     SUB    AL,'A'-10
  176.     CLC
  177.     RET
  178. BAD_DIGIT:
  179.     STC
  180.     RET
  181.  
  182. sectview_com    endp
  183.  
  184. ;
  185.  
  186. MSG0    DB      10,13
  187.         DB      " ************************ ",10,13
  188.         DB      "*** SECTVIEW.COM  v0.2 ***",10,13
  189.         DB      " ************************ ",10,13
  190.         DB      "Juan C. Enrique / May 1992$"
  191.  
  192. MSG00   DB      13,10,13,10,13
  193.         DB      "Num. de sector a leer: $"
  194.  
  195. MSG1    DB      10,13
  196.         DB      "----------------------------------------"
  197.         DB      "----------------------------------------"
  198.         DB      10,13,"$"
  199.  
  200. MSG2    DB      "SECTVIEW terminado!",10,13,"$"
  201.  
  202. MSG51   DB      10,13,7,"* ERROR: Valor incorrecto! *$",10,13
  203. MSG52   DB      10,13,7,"* ERROR de lectura en drive A:!$",10,13
  204.  
  205.  
  206. ;
  207.  
  208. BUFFER:
  209.  
  210.  
  211. CODE_SEG        ENDS
  212.                 END     SECTVIEW_COM
  213.  
  214.  
  215.  
  216.